package com.mfcxy.serviceImpl;

import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mfcxy.entity.Blog;
import com.mfcxy.entity.User;
import com.mfcxy.entityvo.BlogCNum;
import com.mfcxy.exception.CustomException;
import com.mfcxy.mapper.IBlogMapper;
import com.mfcxy.service.IBlogSerivce;

/**
 * 
 * @author mfcxy
 *
 */
@Service
public class BlogSerivce extends BaseService implements IBlogSerivce {

	@Autowired
	private IBlogMapper blogMapper;

	@Autowired(required = false)
	private HttpSession session;

	/**
	 * 新增文章
	 * 
	 * @param blog
	 * @return
	 * @throws CustomException
	 * @throws JsonProcessingException
	 */
	@Override
	public int save(Blog blog) throws JsonProcessingException, CustomException {
		// 处理文件上传
		blog.setImage(getTools().uploads(blog.getImages()));
		// session 获取当前登陆的用户
		User u = (User) session.getAttribute("user");
		blog.setUid(u.getId());
		blog.setNickname(u.getUsername());
		return blogMapper.save(blog);
	}

	/**
	 * 查询列表
	 * 
	 * @param p
	 * @param isshow 是否显示
	 * @param isdel  是否伪删除
	 * @return
	 * @throws IOException
	 * @throws JsonMappingException
	 * @throws JsonParseException
	 */
	@Override
	public Map<String, Object> selectlist(int p) throws JsonParseException, JsonMappingException, IOException {
		// 查询总记录数
		int count = blogMapper.getCount();
		// 返回给控制器的map数据
		Map<String, Object> map = new HashMap<>();

		// 传递给usermapper sql参数
		Map<String, Object> mapparam = new HashMap<>();

		// 计算每页的开始记录数
		mapparam.put("first", getPage().getFirst(p));
		// 每页的记录数量
		mapparam.put("rowlist", getPage().getTotalRecords());

		// 用jackson工具包把对象转换成json字符串
		ObjectMapper mapper = new ObjectMapper();

		// 把json 字符串转换成对象
		List<Blog> list = blogMapper.selectlist(mapparam);
		for (Blog blog : list) {
			blog.setImageUrl(mapper.readValue(blog.getImage(), List.class));
		}

		// 用户数据
		map.put("bloglist", list);
		// 当前分页数
		map.put("p", p);
		// 总页数
		map.put("page", getPage().getTotalPage(count));
		// 返回给控制器
		return map;
	}

	/**
	 * 根据id查询正文
	 * 
	 * @param id
	 * @return
	 */
	public Blog getById(int id) {
		return blogMapper.getById(id);
	}

	/**
	 * 查询列表 (有评论总数）
	 * 
	 * @param p
	 * @return
	 * @throws IOException
	 * @throws JsonMappingException
	 * @throws JsonParseException
	 */
	public Map<String, Object> selectlistNum(int p) throws JsonParseException, JsonMappingException, IOException {
		// 查询总记录数
		int count = blogMapper.getCount();
		// 返回给控制器的map数据
		Map<String, Object> map = new HashMap<>();

		// 传递给usermapper sql参数
		Map<String, Object> mapparam = new HashMap<>();

		// 计算每页的开始记录数
		mapparam.put("first", getPage().getFirst(p));
		// 每页的记录数量
		mapparam.put("rowlist", getPage().getTotalRecords());

		// 用jackson工具包把对象转换成json字符串
		ObjectMapper mapper = new ObjectMapper();

		// 把json 字符串转换成对象
		List<BlogCNum> list = blogMapper.selectlistNum(mapparam);
		for (Blog blog : list) {
			blog.setImageUrl(mapper.readValue(blog.getImage(), List.class));
		}

		// 用户数据
		map.put("bloglist", list);
		// 当前分页数
		map.put("p", p);
		// 总页数
		map.put("page", getPage().getTotalPage(count));
		// 返回给控制器
		return map;
	}

}
